#include <string>
#include <list>
#include <vector>
#include <memory>

using namespace std;

int main()
{
    shared_ptr<string> p1; // shared_ptr，可以指向 string
    shared_ptr<list<int>> p2; // shared_ptr，可以指向 int 的 list

    // 如果 p1 不为空，检查它是否指向一个空 string
    if (p1 && p1->empty())
        *p1 = "hi"; // 如果 p1 指向一个空 string，解引用 p1，将一个新值赋予 string

    // 指向一个值为 42 的 int 的 shared_ptr
    shared_ptr<int> p3 = make_shared<int>(42);
    // p4 指向一个值为"9999999999"的 string
    shared_ptr<string> p4 = make_shared<string>(10, '9');
    // p5 指向一个值初始化的 int，即，值为0
    shared_ptr<int> p5 = make_shared<int>();

    // p6 指向一个动态分配的空 vector<string>
    auto p6 = make_shared<vector<string>>();
}